/********************************************************************************
 * Project Name		[JavaEE_Web]
 * File Name     	[Servlet03.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package _notes.servlet;

/**
 * 保存会话的技术 - Cookie
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public final class Servlet03 {

	public void cookieConcept() {
		/**
		 * Cookie<br/>
		 * 1. 客户端技术: Cookie是一种会话跟踪机制, 该机制采用的是在客户端保持Http状态信息<br/>
		 * 
		 * 2. Cookie是在浏览器访问Web服务器的某个资源时, 由Web服务器在Http响应消息头中附带传送给浏览器的一个小文本文件<br/>
		 * 一旦Web浏览器保存了某个Cookie, 那么在以后每次访问该Web服务器时, 都会在Http请求头中将这个Cookie回传给Web服务器
		 * 
		 * 3. 底层实现原理<br/>
		 * Web服务器通过在Http响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器<br/>
		 * 浏览器则通过在Http请求消息中增加Cookie请求头字段将Cookie回传给Web服务器<br/>
		 * 
		 * 4. 一个Cookie只能标识一种信息, 它至少含有一个标识该信息的名称[Name]和设置值[value]<br/>
		 * 一个Web站点可以给一个Web浏览器发送多个Cookie, 一个Web浏览器也可以存储多个Web站点提供的Cookie<br/>
		 * 浏览器一般只允许存放300个Cookie, 每个站点最多存放20个Cookie, 每个Cookie的大小限制为4KB<br/>
		 */
	}

	public void cookieAPI() {
		/**
		 * javax.servlet.http.Cookie<br/>
		 * 
		 * Cookie cookie = new Cookie(String name, String value); 创建Cookie<br/>
		 * cookie.getName(); 获得Cookie的name<br/>
		 * cookie.getValue(); 获得Cookie的value<br/>
		 * cookie.setValue(String newValue); 设置Cookie的value<br/>
		 * cookie.setMaxAge(int seconds); 设置Cookie存在的时间<br/>
		 * cookie.getMaxAge(); 获得Cookie的有效期<br/>
		 * cookie.setPath(request.getContextPath()); 设置Cookie的有效路径<br/>
		 * cookie.getPath();获得Cookie有效的路径<br/>
		 * 
		 * 关于setMaxAge()<br/>
		 * 1. 默认Cookie是会话级别的[用户打开浏览器访问资源, Cookie创建并被保存在浏览器内存中,
		 * 用户关闭浏览器后Cookie被删除] <br/>
		 * 2. setMaxAge(0): 立即删除该Cookie<br/>
		 * 3. setMaxAge(负数): 不希望存储该Cookie<br/>
		 * 4. setMaxAge(正数): 设置该Cookie的存储时间<br/>
		 * 
		 * 关于setPath()<br/>
		 * 该方法来设置Cookie的作用范围, 其中/代表站点的根目录<br/>
		 * Cookie的作用范围: 可以作用当前目录和当前目录的子目录, 但不能作用于当前目录的上一级目录<br/>
		 * 比如把Cookie的有效路径设置为"/jsp"时, 当浏览器访问"jsp"目录下的Web资源时, 都会带上cookie,
		 * 比如把Cookie的有效路径设置为"/jsp/cookie"时,
		 * 浏览器只有在访问"jsp"目录下的"cookie"这个目录里面的Web资源时才会带上cookie一起访问,
		 * 而当访问"jsp"目录下的Web资源时, 浏览器是不带cookie的<br/>
		 */

		/**
		 * javax.servlet.http.HttpServletRequest<br/>
		 * getCookies(); 从请求中获取Cookie<br/>
		 */

		/**
		 * javax.servlet.http.HttpServletResponse<br/>
		 * addCookie(Cookie cookie); 将Cookie添加到响应中<br/>
		 */
	}

	public void cookieWithChinese() {
		/**
		 * 在Cookie中保存中文<br/>
		 * <code>
		 * Cookie cookie = new Cookie("userName", URLEncoder.encode("不落的太阳", "UTF-8"));
		 * response.addCookie(cookie);
		 * </code><br/>
		 * 
		 * 从Cookie读取中文<br/>
		 * <code>
		 * String username = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
		 * </code><br/>
		 */
	}
}
